#pragma once

#include "fxcc/core/BaseLoader.h"
#include "fxcc/core/graph/opengl3/Effect3d.h"

struct ShaderLoader :public BaseLoader
{
	static fxcc::graph::common::EffectToken m_DefaultToken;

	static std::unordered_map<std::string, std::shared_ptr<fxcc::graph::opengl3::Effect3d>> m_Effects;

	bool LoadFile(const fxcc::File& file);

	std::shared_ptr<fxcc::graph::opengl3::Effect3d> LoadFragShader(const fxcc::File& file);

	std::shared_ptr<fxcc::graph::opengl3::Effect3d> GetEffectFormKey(const std::string& key);

	bool Influence(fxcc::graph::common::MaterialView& material, const std::string& key);

	bool LoadEffects(const fxcc::File& file, bool _force_reload = false);
	
	std::shared_ptr<fxcc::graph::opengl3::Effect3d> LoadEffect(const fxcc::graph::common::EffectDesc& desc);

	std::shared_ptr<fxcc::graph::opengl3::Effect3d> LoadFragShaderPath(const std::string& file);

};